/*
 * 版权所有 (C) 2015 知启蒙(ZHIQIM) 保留所有权利。[遇见知启蒙，邂逅框架梦]
 * 
 * https://zhiqim.org/project/zhiqim_framework/zhiqim_httpd.htm
 *
 * Zhiqim Httpd is licensed under Mulan PSL v2.
 * You can use this software according to the terms and conditions of the Mulan PSL v2.
 * You may obtain a copy of Mulan PSL v2 at:
 *          http://license.coscl.org.cn/MulanPSL2
 * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
 * EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
 * MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
 * See the Mulan PSL v2 for more details.
 */
package org.zhiqim.httpd;

import org.zhiqim.httpd.model.HttpDomainPortPath;
import org.zhiqim.kernel.model.maps.HashMapSS;
import org.zhiqim.kernel.logging.Log;

public interface HttpHeader extends HttpdConstants
{
    /** 获取日志对象 */
    public Log getLog();
    
    /** 获取对应的HTTP监听器监听端口 */
    public int getListenerPort();
    
    /** 获取发送器 */
    public HttpSender getSender();
    
    /** 获取客户端IP地址 */
    public String getRemoteAddr();
    
    /** 获取客户端端口 */
    public int getRemotePort();
    
    /** 获取请求正在处理的上下文环境 */
    public HttpContext getContext();
    
    /** 获取在上下文环境下的路径 */
    public String getPathInContext();
    
    /** 获取远程方法调用时配置的路径 */
    public String getPathInRMI();
    
    /** 获取资源文件下绝对路径 */
    public String getPathOnResource();
    
    /***********************************************************************/
    //获取和判断请求行信息，包括协议、方法、版本、URI等
    /***********************************************************************/

    /** 获取请求行 */
    public String getHeaderLine();
    
    /** 获取请求版本 */
    public String getVersion();
    
    /** 获取URI路径,以/开头，如/test.html，如果没有文件后缀则为'/' */
    public String getPath();
    
    /** 获取请求方法 */
    public String getMethod();
    
    /** 是否是HEAD方法 */
    public boolean isMethodHead();
    
    /** 是否是OPTIONS方法 */
    public boolean isMethodOptions();
    
    /** 是否是PUT方法 */
    public boolean isMethodPut();
    
    /** 是否是DELETE方法 */
    public boolean isMethodDelete();
    
    /** 是否是GET方法 */
    public boolean isMethodGet();
    
    /** 是否是POST方法 */
    public boolean isMethodPost();
    
    /** 是否需要响应内容 */
    public boolean isMethodResponseContent();
    
    /** 是否WebSocket */
    public boolean isWebSocket();
    
    /** 获取查询串 */
    public String getQueryString();
    
    /** 获取协议格式 */
    public String getScheme();
    
    /** 获取HOST:PORT */
    public String getHostPort();
    
    /** 如果有PORT只仅HOST */
    public String getHostOnly();
    
    /** 获取端口信息 */
    public int getPort();
    
    /** 获取域名端口和路径值 */
    public HttpDomainPortPath getDomainPortPath();
    
    /** 获取浏览器代理 */
    public String getUserAgent();
    
    /** 获取URI虚拟目录信息 */
    public String getVirtualDirectory();
    
    /***********************************************************************/
    //获取和判断请求头部信息
    /***********************************************************************/
    
    /** 获取头部信息 */
    public HashMapSS getHeaderMap();
    
    /** 获取请求头属性 */
    public String getHeader(String key);
    
    /** 获取请求内容长度 */
    public int getContentLength();

    /** 获取请求内容类型 */
    public String getContentType();
    
    /** 获取请求要求的类型 */
    public String getMimeType();
    
    /** 判断是否表单提交 */
    public boolean isMimeForm();
    
    /** 判断是否文本请求 */
    public boolean isMimeTextPlain();
    
    /** 设置请求的编码格式 */
    public void setCharacterEncoding(String characterEncoding);

    /** 获取请求要求的编码,如果未设置默认UTF-8 */
    public String getCharacterEncoding();
    
    /** 获取请求头中的编码,如果未设置默认null */
    public String getCharacterEncodingHeader();
    
    /** 是否请求内容GZIP */
    public boolean isRequestGZip();
    
    /** 是否响应支持GZIP */
    public boolean isResponseGZip();
}
